package paquete;

import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.PrintJob;
import java.awt.Toolkit;

/**
 *
 * @author ivan
 */
public class Impresora 
{
    Font fuente = new Font("Dialog", Font.PLAIN, 10);
    PrintJob pj;
    Graphics pagina;

    public Impresora() 
    {
        pj = Toolkit.getDefaultToolkit().getPrintJob(new Frame(), "SCAT", null);
    }

    /**
     * Método que imprime un texto pasado
     * @param texto Texto a imprimir  
     */
    public void imprimir(String texto) 
    {
        int X = 60;
        int Y = 60;

        try {
            pagina = pj.getGraphics();
            pagina.setFont(fuente);
            pagina.setColor(Color.black);
            
            double anchoPagina = pj.getPageDimension().getWidth() - Y*2;
            FontMetrics medidasFuente = pagina.getFontMetrics();

            for (String linea : texto.split("\n")) 
            {    
                if (medidasFuente.stringWidth(texto) < anchoPagina) {
                    pagina.drawString(linea, X,
                        Y += medidasFuente.getHeight());
                } 
                else 
                {
                    String[] words = linea.split(" ");
                    String currentLine = words[0];
                    for (int i = 1; i < words.length; i++) 
                    {
                        if (medidasFuente.stringWidth(currentLine + words[i]) < anchoPagina ) {
                            currentLine += " " + words[i];
                        } 
                        else 
                        {
                            pagina.drawString(currentLine, X, Y += medidasFuente.getHeight());
                            currentLine = words[i];
                        }
                    }
                    if (currentLine.trim().length() > 0) {
                        pagina.drawString(currentLine, X, Y += medidasFuente.getHeight());
                    }
                }
            }

            pagina.dispose();
            pj.end();
        } catch (Exception e) {
            System.out.println("LA IMPRESION SE HA CANCELADO");
        }
    }

}
